package cn.kgc.springmvc.controller;

import cn.kgc.springmvc.entity.Student;
import cn.kgc.springmvc.vo.StudentVO;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.logging.Logger;

/**
 * @author: mosin
 * @version: v1.0  2022/4/29
 * springmvc中参数的绑定
 *  1.基本类型参数
 *  2.包装类型
 *  3.引用类型   数组  String   List
 *  4.javabean   Student
 *
 */
@Controller
@RequestMapping("pr")
public class ParamController {
    /**
     *   基本类型参数的绑定    /pr/p1?age=20   key 要与方法中的参数名字保持一致
     *  使用基本类型进行参数的接收  请求是如果没有对应的参数值 会出现500异常
     *  解决方案：
     *      1.使用基本类型的包装类型接收参数
     *      2.设置基本类型的默认值  前端没有对用的参数传递时  使用设置的默认值进行传递
     * @param age
     * @return
     */
    @RequestMapping("p1")
    public String  test01(int age){
        //1.参数的接收
        System.out.println("age = " + age);
        //2.调用业务层
        //3.响应数据
        return "index";
    }

    //解决方式1
    @RequestMapping("p2")
    public String  test02(Integer age){
        //1.参数的接收
        System.out.println("age = " + age);
        //2.调用业务层
        //3.响应数据
        return "index";
    }


    //解决方式2 @RequestParam  设置默认值   key  参数名不一致
    @RequestMapping("p3")
    public String  test03(@RequestParam(defaultValue = "19",name = "ag") int age){
        //1.参数的接收
        System.out.println("age = " + age);
        //2.调用业务层
        //3.响应数据
        return "index";
    }


    @RequestMapping("p4")
    public String  test04(int age, double score, String name, Date birth){
        //1.参数的接收
        System.out.println("age = " + age);
        System.out.println("name = " + name);
        System.out.println("birth = " + birth);
        System.out.println("score = " + score);
        //2.调用业务层    将接收的数据进行封装    Student

        //3.响应数据
        return "index";
    }


    //参数是数组类型
    @RequestMapping("p5")
    public String  test05(int[] ids){
        //1.参数的接收
        System.out.println("ids = " + Arrays.toString(ids));
        //2.调用业务层

        //3.响应数据
        return "index";
    }


    //参数是list集合 无法直接通过参数名字进行匹配   解决方案：  将集合设置为javabean的属性进行接收
    @RequestMapping("p6")
    public String  test06(StudentVO studentVO){
        //1.参数的接收
        System.out.println("ids = " +studentVO.getIds());
        //2.调用业务层
        //3.响应数据
        return "index";
    }

    //参数类型是javabean类型     保证参数key的名字和javabean中的属性名一致 否则赋值不成功
    @RequestMapping(value = "p7")
    public String  test07(Student student){

        //1.参数的接收
        System.out.println("student = " + student);
        //2.调用业务层
        //3.响应数据
        return "index";
    }

    @RequestMapping("p8")
    public String  test08(String username){
        System.out.println("username:"+username);
        return "index";
    }


}
